
public interface IVector3 {
	
	/**
	 * @return x component
	 */
	public int x();
	
	
	/**
	 * @return y component
	 */
	public int y();
	
	
	/**
	 * @return z component
	 */
	public int z();
	
	
	/**
	 * Set this vector to (x, y, z)
	 * 
	 * @param x
	 * @param y
	 * @param z
	 */
	public void set(int x, int y, int z);
	
	/**
	 * Set this vector from rhs
	 * 
	 * @param rhs
	 */
	public void set(IVector3 rhs);
	
	
	/**
	 * Calculates this += rhs
	 * 
	 * @param rhs
	 */
	public void add(IVector3 rhs);
	
	
	/**
	 * Calculates this -= rhs
	 * 
	 * @param rhs
	 */
	public void subtract(IVector3 rhs);
	
	
	/**
	 * Calculates this *= scale.
	 * 
	 * @param scale: Scaling factor in fixed point
	 */
	public void scale(int scale);
	
	
	/**
	 * Calculates this /= scale
	 * 
	 * @param scale: Scaling factor in fixed point
	 */
	public void invScale(int scale);
	
	
	/**
	 * @return Length of vector as fixed point number
	 */
	public int length();
	
	
	/**
	 * Scales this vector to have length FP.ONE
	 */
	public void unit();
}
